package com.gwnet.cabinet.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gwnet.cabinet.domian.CabinetBox;
import com.gwnet.cabinet.domian.CabinetBoxLog;
import com.gwnet.cabinet.domian.base.Result;
import com.gwnet.cabinet.domian.bo.*;

import java.util.List;

/**
 * <p>
 * 外卖柜-箱格表 服务类
 * </p>
 *
 * @author WangLiang
 * @since 2024-07-23
 */
public interface CabinetBoxService extends IService<CabinetBox> {


    /**
     * 放餐开箱
     * @param openBO
     * @return
     */
    Boolean putToBox(CabinetBoxOpenBO openBO);

    /**
     * 取餐开箱
     * @param takeBoxBO
     * @return
     */
    Boolean getToBox(CabinetTakeBoxBO takeBoxBO);


    /**
     * 管理员开箱
     * @param adminOpenBO
     * @return
     */
    Boolean adminOpen(AdminOpenBO adminOpenBO);

    /**
     * 查询超时外卖列表
     * @param timeOutBoxBO
     * @return
     */
    List<CabinetBoxLog> getTimeOutList(TimeOutBoxBO timeOutBoxBO);

    /**
     * 第三方系统回调本系统取出结果
     * 保存取出记录
     * @param eventBO
     * @return
     */
    Boolean takeEvent(TakeEventBO eventBO);


    /**
     * 分页查询箱格列表
     * @param pageBO
     * @return
     */
    IPage<CabinetBox> page(CabinetBoxPageBO pageBO);


    /**
     * 根据设备ID获取箱格列表
     * @param boxListBO
     * @return
     */
    List<CabinetBox> listByDevSn(CabinetBoxListBO boxListBO);


    /**
     * 修改，可以修改占用状态，应为状态错误并人工修正场景
     * @param updateBO
     * @return
     */
    Boolean updateState(CabinetBoxUpdateBO updateBO);

    /**
     * 根据箱格Id查询箱格详情
     * @param boxId
     * @return
     */
    CabinetBox view(String boxId);
}
